#include "thread_test.h"

thread_test::thread_test(size_t numThreads): mMaxTasks(100)
{
    for (size_t i = 0; i < numThreads; ++i) {
        mWorkers.emplace_back([this] {
            while (true) {
                std::function<void()> task;
                {
                    std::unique_lock<std::mutex> lock(mMutex);
                    mCondition.wait(lock, [this] { return mStop || !mTasks_pro.empty(); });
                    if (mStop && mTasks_pro.empty()) return; // 如果停止并且任务队列为空，退出线程
                    task = std::move(mTasks_pro.top().second); // 获取优先级最高的任务
                    mTasks_pro.pop();
                }
                task(); // 执行任务
                mConditionFull.notify_one(); // 通知可以添加新任务
            }
        });
    }
}

thread_test::~thread_test()
{
        {
            std::unique_lock<std::mutex> lock(mMutex);
            mStop = true; // 设置停止标志
        }
        mCondition.notify_all(); // 唤醒所有线程
        for (std::thread &worker : mWorkers) {
            worker.join(); // 等待所有线程完成
        }
}

//线程处理限时任务
